Réalisation du tracker

Définition

Dans le cadre de la version centralisée, le tracker est l'entité centrale. Celui-ci est connu de tous les pairs à travers leurs identifications. Il regroupe toutes les informations concernant les différents pairs et ainsi permet d'assister les pairs dans leurs recherche de fichiers.  

Fonctionalités

La première fonctionalité du tracker est de récupérer les informations d'un pair. Pour ce faire, le pair lui envoie le message \verb+announce+ . A chaque réception de ce message il parse les différentes données reçues, les insère dans la base de données et enfin envoi un message de confirmation au pair. 
Le tracker doit pouvoir également transmettre le nom de l'ensemble de fichier répondant à un certains nombre de critères à travers la requête \verb+look+.
Le tracker doit renvoyer l'ensemble des pairs possédant une partie ou la totalité d'un fichier à partir de la clé.

Pour pouvoir gérer ces fonctionalités, le tracker écoute sur l'un de ses port en attente d'un message à traiter. A chaque réception d'un message, un  thread est crée réalisant une des opérations décrites précédemment afin d'éviter le blocage du port d'écoute.
  

Implémentation

Nous avons implémenté le tracker en java.

Nous avons mis en place une base de données hsqldb en mémoire. Nous la manipulons par l'intermédiaire du framework hibernate qui permet de réaliser un mapping objet/relationnel. Le principal avantage de l'utilisation d'une base de données est l'utilisation de requêtes notamment pour les recherches de fichiers par critères.  Il a été ainsi implémenté la recherche par nom et par taille de fichier. 





Description de l'architecture.

Le tracker écoute en continue sur l'un de ses ports. A chaque connexion établie, un thread est créé pour prendre en charge le message reçu. Ce thread parse la requête envoyées par le pair. Si celle-ci n'est pas validé elle ne sera pas prise en compte. Une fois validé, la commande associé à la requête est construite puis executée. L'exécution nécessite un dialogue avec la base de données. Une fois exécuté, un message est construit pour être renvoyé au pair.   

cf schema








